home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 001-025 / disk_009 / proff / eval.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  1KB  |  68 lines

  1.  
  2.  
  3. #include <stdio.h>
  4. #include <ctype.h>
  5. #include "proff.h"
  6. #include "debug.h"
  7.  
  8.  
  9. /*
  10.  * eval - evaluate defined command (push back definition)
  11.  *
  12.  */
  13. eval(buf,defn)
  14. char buf[];
  15. char defn[];
  16. {
  17.     register int j,k;
  18.     int i;
  19.     int argptr[10];
  20.  
  21.     for (i = 0; i < 10 ; i++)
  22.         argptr[i] = 0;
  23.  
  24.     buf[0] = '\0';        /* buf[0] is cchar */
  25.     dprintf(defn);
  26.     dprintf("eval  ");
  27.     i = 1;
  28.     argptr[0] = 1;        /* first parm is macro name */
  29.     while (buf[i] != ' ' && buf[i] != '\t' &&
  30.         buf[i] != '\n' && buf[i] != '\0')
  31.         i++;
  32.     buf[i++] = '\0';        /* EOS terminate */
  33.     /*
  34.      * start scanning remaining macro parameters.
  35.      * delimiters are blanks or commas. Any string
  36.      * enclosed with double quotes are accepted as
  37.      * parameters as well
  38.      *
  39.      */
  40.     for (j = 1; j < 10; j++) {
  41.         skipbl(buf, &i);
  42.         if (buf[i] == '\n' || buf[i] == '\0')
  43.             break;
  44.         argptr[j] = i;
  45.         while (buf[i] != ' ' && buf[i] != '\t' &&
  46.             buf[i] != ',' && buf[i] != '\n' && buf[i] != '\0')
  47.             i++;
  48.         buf[i] = '\0';
  49.         i++;
  50.     }
  51.     for (k = strlen(defn) - 1; k >= 0; k--)
  52.         if (defn[k-1] != ARGFLAG)
  53.             putbak(defn[k]);
  54.         else {
  55.             if (defn[k] < '0' || defn[k] > '9')
  56.                 putbak(defn[k]);
  57.             else {
  58.                 i = defn[k] - '0';
  59.                 i = argptr[i];
  60.                 pbstr(&buf[i]);
  61.                 k--;        /* skip over $ */
  62.             }
  63.         }
  64.     if (k = 0)    /* do the last character */
  65.         putbak(defn[k]);
  66. }
  67.  
  68.